package com.nlx.notes.module.service.statistics;

import com.nlx.notes.module.bean.dto.querydb.StatisticsQueryDTO;
import com.nlx.notes.module.bean.dto.statistics.TopStatisticsDTO;
import com.nlx.notes.module.bean.dto.statistics.YearMonthStatisticsQueryDTO;
import com.nlx.notes.module.bean.dto.statistics.YearOverviewQueryDTO;
import com.nlx.notes.module.bean.vo.charts.MonthChartsDataVO;
import com.nlx.notes.module.bean.vo.statistics.*;
import com.nlx.notes.support.context.UserHolder;

import java.time.YearMonth;
import java.util.List;

public interface StatisticsManageService {

    /**
     * 月度概览
     * @param statisticsQueryDTO 查询参数
     * @return MonthStatisticsVO
     */
    MonthStatisticsVO monthOverview(StatisticsQueryDTO statisticsQueryDTO);

    /**
     * 查询消费top
     * @param topStatisticsDTO 参数
     * @return MonthExpenseTopStatisticsVO
     */
    List<TopStatisticsVO> topStatistics(TopStatisticsDTO topStatisticsDTO);

    /**
     * 统计月度分类数据
     * @return MonthChartsDataVO
     */
    MonthChartsDataVO monthStatisticsMetrics(YearMonth month, Long userId,Long bookId);

    /**
     * 查询年度的概览数据
     * @param yearOverviewQueryDTO 参数
     * @return YearOverviewStatisticsVO
     */
    YearOverviewStatisticsVO yearOverviewStatistics(YearOverviewQueryDTO yearOverviewQueryDTO);

    /**
     * 查询年度每月的收支统计数据
     * @param yearMonthStatisticsQueryDTO 参数
     * @return 每月的收支统计数据列表
     */
    List<YearMonthStatisticsVO> yearMonthStatistics(YearMonthStatisticsQueryDTO yearMonthStatisticsQueryDTO);

    /**
     * 查询用户历年统计数据
     * @param userId 用户ID
     * @return 历年统计数据
     */
    UserYearlyStatisticsVO getUserYearlyStatistics(Long userId,Long bookId);
}
